package com.je.app.view;

import java.awt.Dimension;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.JSeparator;

import java.awt.Color;

import javax.swing.JLabel;

import java.awt.Font;

import javax.swing.SwingConstants;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.JTextField;
import javax.swing.JButton;

import java.awt.SystemColor;

import javax.swing.JTextArea;
import javax.swing.JComboBox;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

import com.je.app.control.ControlStock;
import com.je.app.view.MainFrame.MessageType;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.util.Date;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;

@SuppressWarnings("serial")
public class StockAdministracion extends JPanel{
	private JTable tablaStockActual;
	private JTextField textFieldImporteBaja;
	private JTextField textFieldImporteAlta;
	private JComboBox<String> comboBoxProductoAlta;
	private JSpinner spinnerCantidadAlta;
	private JTextArea textAreaAlta;
	private JSpinner spinnerCantidadBaja;
	private JComboBox<String> comboBoxProductoBaja;
	private JTextArea textAreaBaja;
	private JButton button;
	private final ButtonGroup grupoRadiosAlta = new ButtonGroup();
	private final ButtonGroup grupoRadiosBaja = new ButtonGroup();
	private JRadioButton radioDepositoAlta;
	private JRadioButton radioVentaAlta;
	private JRadioButton radioDepositoBaja;
	private JRadioButton radioVentaBaja;
	
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public StockAdministracion (DefaultTableModel model, DefaultComboBoxModel allNames, DefaultComboBoxModel availableNames){
		
		setLayout(null);		
		setSize(new Dimension(1024, 823));
		
		JSeparator separator = new JSeparator();
		separator.setForeground(Color.LIGHT_GRAY);
		separator.setBounds(26, 44, 75, 1);
		add(separator);
		
		JLabel lblStockActual = new JLabel("Stock Actual");
		lblStockActual.setHorizontalAlignment(SwingConstants.CENTER);
		lblStockActual.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblStockActual.setBounds(97, 35, 108, 21);
		add(lblStockActual);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setOrientation(SwingConstants.VERTICAL);
		separator_1.setForeground(Color.LIGHT_GRAY);
		separator_1.setBounds(26, 44, 1, 700);
		add(separator_1);
		
		JSeparator separator_2 = new JSeparator();
		separator_2.setForeground(Color.LIGHT_GRAY);
		separator_2.setBounds(199, 44, 313, 1);
		add(separator_2);
		
		JSeparator separator_3 = new JSeparator();
		separator_3.setOrientation(SwingConstants.VERTICAL);
		separator_3.setForeground(Color.LIGHT_GRAY);
		separator_3.setBounds(512, 44, 1, 700);
		add(separator_3);
		
		JSeparator separator_4 = new JSeparator();
		separator_4.setForeground(Color.LIGHT_GRAY);
		separator_4.setBounds(26, 743, 486, 1);
		add(separator_4);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(44, 62, 450, 663);
		add(scrollPane);
		
		tablaStockActual = new JTable();
		scrollPane.setViewportView(tablaStockActual);
		tablaStockActual.setModel(model);

		DefaultTableCellRenderer modelocentrar = new DefaultTableCellRenderer();
		DefaultTableCellRenderer modeloderecha = new DefaultTableCellRenderer();
		modelocentrar.setHorizontalAlignment(SwingConstants.CENTER);
		modeloderecha.setHorizontalAlignment(SwingConstants.RIGHT);
		tablaStockActual.getColumnModel().getColumn(0).setPreferredWidth(175);
		tablaStockActual.getColumnModel().getColumn(1).setPreferredWidth(60);
		tablaStockActual.getColumnModel().getColumn(1).setCellRenderer(modeloderecha);
		tablaStockActual.getColumnModel().getColumn(2).setPreferredWidth(50);
		tablaStockActual.getColumnModel().getColumn(2).setCellRenderer(modelocentrar);
		tablaStockActual.getColumnModel().getColumn(3).setPreferredWidth(50);
		tablaStockActual.getColumnModel().getColumn(3).setCellRenderer(modelocentrar);

		
		
		JLabel lblProducto = new JLabel("Producto:");
		lblProducto.setVerticalAlignment(SwingConstants.TOP);
		lblProducto.setHorizontalAlignment(SwingConstants.LEFT);
		lblProducto.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblProducto.setBounds(583, 451, 108, 26);
		add(lblProducto);
		
		JLabel lblCantidad = new JLabel("Cantidad:");
		lblCantidad.setVerticalAlignment(SwingConstants.TOP);
		lblCantidad.setHorizontalAlignment(SwingConstants.LEFT);
		lblCantidad.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblCantidad.setBounds(583, 483, 108, 26);
		add(lblCantidad);
		
		JLabel lblImporte = new JLabel("Importe:      $");
		lblImporte.setVerticalAlignment(SwingConstants.TOP);
		lblImporte.setHorizontalAlignment(SwingConstants.LEFT);
		lblImporte.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblImporte.setBounds(583, 515, 108, 26);
		add(lblImporte);
		
		textFieldImporteBaja = new JTextField();
		textFieldImporteBaja.setHorizontalAlignment(SwingConstants.CENTER);
		textFieldImporteBaja.setFont(new Font("Tahoma", Font.PLAIN, 12));
		textFieldImporteBaja.setEditable(false);
		textFieldImporteBaja.setColumns(10);
		textFieldImporteBaja.setBounds(647, 510, 107, 26);
		add(textFieldImporteBaja);
		
		JButton botonCancelarBaja = new JButton("Limpiar");
		botonCancelarBaja.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				comboBoxProductoBaja.setSelectedIndex(0);
				spinnerCantidadBaja.setValue(0);
				textAreaBaja.setText("");
				grupoRadiosBaja.clearSelection();
				textAreaBaja.setText("");
				
			}
		});
		botonCancelarBaja.setForeground(Color.BLACK);
		botonCancelarBaja.setFont(new Font("Tahoma", Font.PLAIN, 12));
		botonCancelarBaja.setBorder(UIManager.getBorder("Button.border"));
		botonCancelarBaja.setBackground(SystemColor.activeCaptionBorder);
		botonCancelarBaja.setBounds(896, 699, 84, 26);
		add(botonCancelarBaja);
		
		JSeparator separator_5 = new JSeparator();
		separator_5.setOrientation(SwingConstants.VERTICAL);
		separator_5.setForeground(Color.LIGHT_GRAY);
		separator_5.setBounds(998, 424, 1, 319);
		add(separator_5);
		
		JButton botonAceptarBaja = new JButton("Aceptar");
		botonAceptarBaja.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent arg0) {
				if(comboBoxProductoBaja.getSelectedIndex()<=0){
					MainFrame.getInstance().showMessage(MessageType.ERROR, "No ha seleccionado ningun producto");
				}
				else if(new Integer(""+spinnerCantidadBaja.getValue())<=0)
					MainFrame.getInstance().showMessage(MessageType.ERROR, "La cantidad debe ser mayor a 0");
				else if(radioVentaBaja.isSelected())
					ControlStock.getInstance().bajarStock(comboBoxProductoBaja.getSelectedIndex(), new Date(), (Integer) spinnerCantidadBaja.getValue(), 0, textAreaBaja.getText());
				else if(radioDepositoBaja.isSelected())
					ControlStock.getInstance().bajarStock(comboBoxProductoBaja.getSelectedIndex(), new Date(), 0, (Integer) spinnerCantidadBaja.getValue(), textAreaBaja.getText());
			}
		});
		botonAceptarBaja.setForeground(Color.BLACK);
		botonAceptarBaja.setFont(new Font("Tahoma", Font.PLAIN, 12));
		botonAceptarBaja.setBorder(UIManager.getBorder("Button.border"));
		botonAceptarBaja.setBackground(SystemColor.activeCaptionBorder);
		botonAceptarBaja.setBounds(794, 699, 84, 26);
		add(botonAceptarBaja);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(583, 579, 397, 102);
		add(scrollPane_1);
		
		textAreaBaja = new JTextArea();
		scrollPane_1.setViewportView(textAreaBaja);
		
		JLabel lblObservacionesCaracteres = new JLabel("Observaciones (200 caracteres m\u00E1ximo):");
		lblObservacionesCaracteres.setVerticalAlignment(SwingConstants.TOP);
		lblObservacionesCaracteres.setHorizontalAlignment(SwingConstants.LEFT);
		lblObservacionesCaracteres.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblObservacionesCaracteres.setBounds(583, 552, 250, 26);
		add(lblObservacionesCaracteres);
		
		comboBoxProductoBaja = new JComboBox(availableNames);
		comboBoxProductoBaja.setBounds(647, 446, 136, 26);
		add(comboBoxProductoBaja);
		comboBoxProductoBaja.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				if(comboBoxProductoBaja.getSelectedIndex()<=0){

				}
				else{
					textFieldImporteBaja.setText("" + ControlStock.getInstance().obtenerPrecioConsumicion((String) comboBoxProductoBaja.getSelectedItem()));
				}				
			}
			
		});

		
		spinnerCantidadBaja = new JSpinner();
		spinnerCantidadBaja.setModel(new SpinnerNumberModel(0, 0, 10, 1));
		spinnerCantidadBaja.setBounds(647, 478, 107, 26);
		add(spinnerCantidadBaja);
		
		JSeparator separator_6 = new JSeparator();
		separator_6.setOrientation(SwingConstants.VERTICAL);
		separator_6.setForeground(Color.LIGHT_GRAY);
		separator_6.setBounds(565, 424, 1, 319);
		add(separator_6);
		
		JSeparator separator_7 = new JSeparator();
		separator_7.setForeground(Color.LIGHT_GRAY);
		separator_7.setBounds(565, 743, 433, 1);
		add(separator_7);
		
		JLabel lblGestionStock = new JLabel("Dar de Baja Stock");
		lblGestionStock.setHorizontalAlignment(SwingConstants.CENTER);
		lblGestionStock.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblGestionStock.setBounds(607, 414, 154, 21);
		add(lblGestionStock);
		
		JSeparator separator_8 = new JSeparator();
		separator_8.setForeground(Color.LIGHT_GRAY);
		separator_8.setBounds(565, 424, 40, 1);
		add(separator_8);
		
		JSeparator separator_9 = new JSeparator();
		separator_9.setForeground(Color.LIGHT_GRAY);
		separator_9.setBounds(765, 424, 233, 1);
		add(separator_9);
		
		JLabel label = new JLabel("Producto:");
		label.setVerticalAlignment(SwingConstants.TOP);
		label.setHorizontalAlignment(SwingConstants.LEFT);
		label.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label.setBounds(583, 72, 108, 26);
		add(label);
		
		JLabel label_1 = new JLabel("Cantidad:");
		label_1.setVerticalAlignment(SwingConstants.TOP);
		label_1.setHorizontalAlignment(SwingConstants.LEFT);
		label_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_1.setBounds(583, 104, 108, 26);
		add(label_1);
		
		JLabel lblImporte_1 = new JLabel("Importe:      $");
		lblImporte_1.setVerticalAlignment(SwingConstants.TOP);
		lblImporte_1.setHorizontalAlignment(SwingConstants.LEFT);
		lblImporte_1.setFont(new Font("Tahoma", Font.PLAIN, 12));
		lblImporte_1.setBounds(583, 136, 108, 26);
		add(lblImporte_1);
		
		textFieldImporteAlta = new JTextField();
		textFieldImporteAlta.setHorizontalAlignment(SwingConstants.CENTER);
		textFieldImporteAlta.setFont(new Font("Tahoma", Font.PLAIN, 12));
		textFieldImporteAlta.setEditable(false);
		textFieldImporteAlta.setColumns(10);
		textFieldImporteAlta.setBounds(647, 131, 107, 26);
		add(textFieldImporteAlta);
		
		JButton botonCancelarAlta = new JButton("Limpiar");
		botonCancelarAlta.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				comboBoxProductoAlta.setSelectedIndex(0);
				spinnerCantidadAlta.setValue(0);
				textAreaAlta.setText("");
				grupoRadiosAlta.clearSelection();
				textFieldImporteAlta.setText("");
				
				
			}
		});
		botonCancelarAlta.setForeground(Color.BLACK);
		botonCancelarAlta.setFont(new Font("Tahoma", Font.PLAIN, 12));
		botonCancelarAlta.setBorder(UIManager.getBorder("Button.border"));
		botonCancelarAlta.setBackground(SystemColor.activeCaptionBorder);
		botonCancelarAlta.setBounds(896, 320, 84, 26);
		add(botonCancelarAlta);
		
		JSeparator separator_10 = new JSeparator();
		separator_10.setOrientation(SwingConstants.VERTICAL);
		separator_10.setForeground(Color.LIGHT_GRAY);
		separator_10.setBounds(998, 45, 1, 319);
		add(separator_10);
		
		JButton botonAceptarAlta = new JButton("Aceptar");
		botonAceptarAlta.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(comboBoxProductoAlta.getSelectedIndex()<=0){
					MainFrame.getInstance().showMessage(MessageType.ERROR, "No ha seleccionado ningun producto");
				}
				else if(new Integer(""+spinnerCantidadAlta.getValue())<=0)
					MainFrame.getInstance().showMessage(MessageType.ERROR, "La cantidad debe ser mayor a 0");
				else if(radioVentaAlta.isSelected()){
					ControlStock.getInstance().cargarStock(comboBoxProductoAlta.getSelectedIndex(), new Date(), (Integer) spinnerCantidadAlta.getValue(), 0, textAreaAlta.getText());
				}
				else if(radioDepositoAlta.isSelected()){
					ControlStock.getInstance().cargarStock(comboBoxProductoAlta.getSelectedIndex(), new Date(), 0, (Integer) spinnerCantidadAlta.getValue(), textAreaAlta.getText());
				}
				else
					MainFrame.getInstance().showMessage(MessageType.ERROR, "No ha seleccionado un tipo de stock");
			}
		});
		botonAceptarAlta.setForeground(Color.BLACK);
		botonAceptarAlta.setFont(new Font("Tahoma", Font.PLAIN, 12));
		botonAceptarAlta.setBorder(UIManager.getBorder("Button.border"));
		botonAceptarAlta.setBackground(SystemColor.activeCaptionBorder);
		botonAceptarAlta.setBounds(794, 320, 84, 26);
		add(botonAceptarAlta);
		
		JScrollPane scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(583, 200, 397, 102);
		add(scrollPane_2);
		
		textAreaAlta = new JTextArea();
		scrollPane_2.setViewportView(textAreaAlta);
		
		JLabel label_3 = new JLabel("Observaciones (200 caracteres m\u00E1ximo):");
		label_3.setVerticalAlignment(SwingConstants.TOP);
		label_3.setHorizontalAlignment(SwingConstants.LEFT);
		label_3.setFont(new Font("Tahoma", Font.PLAIN, 12));
		label_3.setBounds(583, 173, 250, 26);
		add(label_3);
		
		comboBoxProductoAlta = new JComboBox(allNames);
		comboBoxProductoAlta.setBounds(647, 67, 136, 26);
		add(comboBoxProductoAlta);
		comboBoxProductoAlta.addActionListener(new ActionListener(){

			public void actionPerformed(ActionEvent arg0) {
				if(comboBoxProductoAlta.getSelectedIndex()<=0){
					
				}
				else{
					textFieldImporteAlta.setText("" + ControlStock.getInstance().obtenerPrecioConsumicion((String) comboBoxProductoAlta.getSelectedItem()));
				}				
			}
			
		});
		
		spinnerCantidadAlta = new JSpinner();
		spinnerCantidadAlta.setModel(new SpinnerNumberModel(0, 0, 10, 1));
		spinnerCantidadAlta.setBounds(647, 99, 107, 26);
		add(spinnerCantidadAlta);
		
		JSeparator separator_11 = new JSeparator();
		separator_11.setOrientation(SwingConstants.VERTICAL);
		separator_11.setForeground(Color.LIGHT_GRAY);
		separator_11.setBounds(565, 45, 1, 319);
		add(separator_11);
		
		JSeparator separator_12 = new JSeparator();
		separator_12.setForeground(Color.LIGHT_GRAY);
		separator_12.setBounds(565, 364, 433, 1);
		add(separator_12);
		
		JLabel lblDarDeAlta = new JLabel("Dar de Alta Stock");
		lblDarDeAlta.setHorizontalAlignment(SwingConstants.CENTER);
		lblDarDeAlta.setFont(new Font("Tahoma", Font.PLAIN, 16));
		lblDarDeAlta.setBounds(607, 35, 154, 21);
		add(lblDarDeAlta);
		
		JSeparator separator_13 = new JSeparator();
		separator_13.setForeground(Color.LIGHT_GRAY);
		separator_13.setBounds(565, 45, 40, 1);
		add(separator_13);
		
		JSeparator separator_14 = new JSeparator();
		separator_14.setForeground(Color.LIGHT_GRAY);
		separator_14.setBounds(765, 45, 233, 1);
		add(separator_14);
		
		button = new JButton("Editar");
		button.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(button.getText().equals("Editar")){
					textFieldImporteBaja.setEditable(true);
					button.setText("Aceptar");
				}
				else{
					//verificar valor y guardar
					double precio = 0;
					String nombreConsumicion = null;
					boolean validado = true;
					try{
						precio = new Double(textFieldImporteBaja.getText());
					}
					catch(Exception exc){
						MainFrame.getInstance().showMessage(MessageType.ERROR, "El precio ingresado no es v\u00E1lido");
						validado = false;
					}

					nombreConsumicion = (String) comboBoxProductoBaja.getSelectedItem();
					System.out.println(comboBoxProductoBaja.getSelectedIndex());
					if(comboBoxProductoBaja.getSelectedIndex()<=0){
						MainFrame.getInstance().showMessage(MessageType.ERROR, "Debe seleccionar un producto");
						validado = false;
					}
					
					if(validado){
						ControlStock.getInstance().modificarPrecioConsumicion(precio, nombreConsumicion);
						button.setText("Editar");
						textFieldImporteBaja.setEditable(false);
					}
				}
			}
		});
		button.setForeground(Color.BLACK);
		button.setFont(new Font("Tahoma", Font.PLAIN, 12));
		button.setBorder(UIManager.getBorder("Button.border"));
		button.setBackground(SystemColor.activeCaptionBorder);
		button.setBounds(794, 509, 84, 26);
		add(button);
		
		radioDepositoAlta = new JRadioButton("Dep\u00F3sito");
		grupoRadiosAlta.add(radioDepositoAlta);
		radioDepositoAlta.setBounds(804, 62, 75, 23);
		add(radioDepositoAlta);
		
		radioVentaAlta = new JRadioButton("En venta");
		radioVentaAlta.setBounds(804, 88, 75, 23);
		grupoRadiosAlta.add(radioVentaAlta);
		add(radioVentaAlta);
		
		radioDepositoBaja = new JRadioButton("Dep\u00F3sito");
		grupoRadiosBaja.add(radioDepositoBaja);
		radioDepositoBaja.setBounds(804, 446, 75, 23);
		add(radioDepositoBaja);
		
		radioVentaBaja = new JRadioButton("En venta");
		grupoRadiosBaja.add(radioVentaBaja);
		radioVentaBaja.setBounds(804, 472, 75, 23);
		add(radioVentaBaja);
				
	}
}
